home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / SAT 2.3.8 / Demos / StepPlatform Demo ƒ / sPlayerSprite.p < prev    next >
Text File  |  1996-05-11  |  4KB  |  180 lines

  1. (* Player sprite for the Platform test *)
  2.  
  3. unit sPlayerSprite;
  4. interface
  5.     uses
  6. {$ifc UNDEFINED THINK_PASCAL}
  7.         Types, QuickDraw, Menus, Windows, TextEdit, Fonts,{}
  8.         Dialogs, Memory, ToolUtils, Events, {}
  9. {$endc}
  10.         SAT, PlatformGlobals;
  11.  
  12.     procedure InitPlayerSprite;
  13.     procedure SetupPlayerSprite (me: PlSpritePtr);
  14.     procedure HandlePlayerSprite (me: PlSpritePtr);
  15.  
  16.     var
  17.         playerSp: PlSpritePtr;
  18.  
  19. implementation
  20.  
  21. {ifndef abs}
  22. {abs=(x)    (x>0?x:-x);}
  23. {endif}
  24.  
  25.     const
  26.         PlayerHigh = 64;
  27.         PlayerSpeed = 5;
  28.         Gforce = 2;{like g = 9.8 m/sec^2}
  29.         JumpSpeed = 23;
  30.  
  31.     var
  32.         rightFaces, leftFaces: array[0..4] of FacePtr;
  33.         fallFace: array[0..2] of FacePtr;
  34.  
  35.     procedure HandleKeys (me: PlSpritePtr);
  36.     forward;
  37.  
  38.     procedure InitPlayerSprite;
  39.         var
  40.             i: Integer;
  41.     begin
  42.         for i := 0 to 3 do
  43.             begin
  44.                 leftFaces[i] := SATGetFace(128 + i);
  45.                 rightFaces[i] := SATGetFace(132 + i);
  46.             end;
  47.         for i := 0 to 1 do
  48.             fallFace[i] := SATGetFace(136 + i);
  49.     end;
  50.  
  51.     procedure HandlePlayerSprite (me: PlSpritePtr);
  52.         var
  53.             theEvent: EventRecord;
  54.             temp: char;
  55.     begin
  56.         HandleKeys(me);
  57.  
  58.         (*  Vspeed Limit ,Acceleration and Updating V Position    *)
  59.         if (me^.speed.v > 30) then
  60.             me^.speed.v := 30;
  61.         me^.speed.v := me^.speed.v + Gforce;
  62.         me^.position.v := me^.position.v + me^.speed.v;
  63.  
  64.         (*    Keeping the Hero with the same speed as the HMov platform    *)
  65.         if (me^.action = JumpFromHMov) then
  66.             me^.position.h := me^.position.h + me^.speed.h;
  67.  
  68.         (*Make sure we are always visible!*)
  69.         (*************************)
  70.         if (me^.position.v < 0) then
  71.             begin
  72.                 me^.position.v := 0;
  73.                 me^.speed.v := 0;
  74.             end;
  75.         if (me^.position.h < 0) then
  76.             begin
  77.                 me^.position.h := 0;
  78.                 me^.speed.h := 0;
  79.             end;
  80.         if (me^.position.v > gSAT.offSizeV - PlayerHigh) then
  81.             begin
  82.                 me^.action := Stand;
  83.                 me^.position.v := gSAT.offSizeV - PlayerHigh;
  84.                 me^.speed.v := 0;
  85.             end;
  86.         if (me^.position.h > gSAT.offSizeH - PlayerHigh) then
  87.             begin
  88.                 me^.position.h := gSAT.offSizeH - PlayerHigh;
  89.                 me^.speed.h := 0;
  90.             end;
  91.  
  92.         me^.mode := abs(me^.mode + 1);
  93.         me^.layer := -(me^.position.v);
  94.     end; {HandlePlayerSprite}
  95.  
  96.  
  97.     procedure HitPlayerSprite (me: SpritePtr; him: SpritePtr);
  98.     begin
  99. (* Hit something! We can take whatever action we need here, but in this case,}
  100. {     we let the other sprites decide. We could have omitted this function altogether and passed nil.*)
  101.         if him^.kind = 1 then
  102.             begin
  103.             end
  104.         else if him^.kind = 2 then
  105.             begin
  106.             end;
  107.     end; {HitPlayerSprite}
  108.  
  109.     procedure SetupPlayerSprite (me: PlSpritePtr);
  110.     begin
  111.         me^.action := Stand;
  112.         me^.mode := 0;
  113.         me^.speed.h := 0;
  114.         me^.kind := 1;                                  (* friend kind *)
  115.         SetRect(me^.hotRect, 12, 0, PlayerHigh - 10, PlayerHigh);
  116.         me^.face := fallFace[0];
  117.         me^.task := @HandlePlayerSprite;
  118.         me^.hitTask := @HitPlayerSprite;
  119.  
  120.         playerSp := me;
  121.     end; {SetupPlayerSprite}
  122.  
  123.     procedure HandleKeys (me: PlSpritePtr);
  124.         {    RIGHT - Key Number 6}
  125.     begin
  126.         if (IsPressed($7B) or IsPressed($56)) then        (* left *)
  127.             begin
  128.                 if me^.action = JumpFromHMov then
  129.                     me^.position.h := me^.position.h - PlayerSpeed - abs(me^.speed.h)
  130.                 else
  131.                     me^.position.h := me^.position.h - PlayerSpeed;
  132.                 me^.speed.h := -PlayerSpeed;
  133.                 me^.face := leftFaces[BitAnd(me^.mode div 3, 3)];
  134.             end;
  135.  
  136.         {    LEFT    - Key Number 4}
  137.         if (IsPressed($7C) or IsPressed($58)) then    (* right *)
  138.             begin
  139.                 if (me^.action = JumpFromHMov) then    {stay on the platform}
  140.                     me^.position.h := me^.position.h + PlayerSpeed - abs(me^.speed.h)
  141.                 else
  142.                     me^.position.h := me^.position.h + PlayerSpeed;
  143.                 me^.speed.h := PlayerSpeed;
  144.                 me^.face := rightFaces[BitAnd(me^.mode div 3, 3)]; {replace the face}
  145.             end;
  146.  
  147.         {  Not JUMP - not pushing key num 8 ,to prevent auto jumping!}
  148.         if (not (IsPressed($7E) or IsPressed($5B))) then
  149.             me^.JumpKey := NotPushed;
  150.  
  151.         {     JUMP - Key Number 8             }
  152.         if (IsPressed($7E) or IsPressed($5B)) then
  153.             begin
  154.                 if (me^.speed.v < 10) then
  155.                     begin
  156.                         if ((me^.JumpKey = NotPushed) and ((me^.action <> Jump) and (me^.action <> JumpFromHMov))) then
  157.                             begin
  158.                                 me^.speed.v := -JumpSpeed;
  159.                                 if (me^.action = StandOnHMovPlatform) then
  160.                                     begin
  161.                                         me^.position.h := me^.position.h + me^.speed.h;
  162.                                         me^.action := JumpFromHMov;
  163.                                     end
  164.                                 else
  165.                                     me^.action := Jump;
  166.  
  167.                                 me^.JumpKey := Pushed;
  168.                             end;
  169.                     end;
  170.             end;
  171.             { Down - Key Number 2}
  172.         if (IsPressed($7D) or IsPressed($54)) then
  173.             ;
  174.  
  175.             {         - Clear Key}
  176.         if (IsPressed($47)) then
  177.             ;
  178.     end;
  179.  
  180. end.